package com.apifamily.project.service.impl;

import com.apifamily.common.model.entity.InterfaceInfo;
import com.apifamily.project.common.ErrorCode;
import com.apifamily.project.exception.BusinessException;
import com.apifamily.project.mapper.InterfaceInfoMapper;
import com.apifamily.project.service.InterfaceInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**
* @author asus
* @description 针对表【interface_info(接口信息)】的数据库操作Service实现
* @createDate 2024-02-26 18:58:42
*/
@Service
public class InterfaceInfoServiceImpl extends ServiceImpl<InterfaceInfoMapper, InterfaceInfo>
    implements InterfaceInfoService {

    /**
     * 校验
     * @param interfaceInfo
     * @param add
     */
    @Override
    public void validInterfaceInfo(InterfaceInfo interfaceInfo, boolean add) {
        if (interfaceInfo == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        String name = interfaceInfo.getName();
        String description = interfaceInfo.getDescription();
        String url = interfaceInfo.getUrl();
        String method = interfaceInfo.getMethod();

        // 创建时，所有参数必须非空
        if (add) {
            if (StringUtils.isAnyBlank(name,url,method)) {
                throw new BusinessException(ErrorCode.PARAMS_ERROR);
            }
        }
        // 校验名称长度
        if (StringUtils.isNotBlank(name) && name.length() > 50) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR,"名称过长");
        }

        // 校验描述长度
        if (StringUtils.isNotBlank(description) && description.length() > 150) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR,"描述过长");
        }

        // 校验URL格式
        if (!isValidUrl(url)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR,"URL格式不正确");
        }

        // 校验请求参数、请求头、响应头的格式等（根据具体业务需求自定义校验逻辑）

        // 校验请求类型
        if (!isValidHttpMethod(method)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR,"请求类型不正确");

        }

    }

    private boolean isValidUrl(String url) {
        // 这里可以使用正则表达式等方式校验URL格式
        // 这里仅简单示例，判断URL是否以http或https开头
        return StringUtils.isNotBlank(url) && (url.startsWith("http://") || url.startsWith("https://"));
    }

    private boolean isValidHttpMethod(String method) {
        // 这里可以定义HTTP请求类型的合法值，比如GET、POST、PUT、DELETE等
        // 这里仅简单示例，假设只有四种合法请求类型
        return StringUtils.isNotBlank(method) && (method.equals("GET") || method.equals("POST") || method.equals("PUT") || method.equals("DELETE"));
    }
}




